package cn.liujianbo.example.springbean.bean3;

import cn.liujianbo.example.springbean.bean3.component.AppConfig;
import cn.liujianbo.example.springbean.bean3.component.OrderService;
import cn.liujianbo.example.springbean.bean3.component.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.lang.reflect.Field;

/**
 * @author 刘建波
 * @date 2021-10-10 20:15
 * 依赖注入
 */
public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        // 1. 依赖注入
        OrderService orderService = (OrderService)context.getBean("order");
        UserService userService = (UserService)context.getBean("userService");
        // 思考 userService 中的 OrderService属性值和 容器中获取的 orderService 是否为同一个
        System.out.println(userService.orderService == orderService);
        // 如果是同一个对象，spring容器是如何帮我们赋值的？
        for (Field field : UserService.class.getDeclaredFields()) {
            if (field.isAnnotationPresent(Autowired.class)) {
                // 先根据类型从容器中获取bean,只获取到一个时，直接填充
                // 根据类型获取到多个bean时，再根据属性名获取，获取不到直接报错
            }
        }

    }
}
